Skip to content

Conversation

@callebtc
Copy link
Collaborator

@callebtc callebtc commented Nov 25, 2025

Summary

This PR refactors LocationChannelManager to use native Android LocationManager updates instead of a coroutine-based polling mechanism for live location refreshing.

Key Changes

  • Replaced refreshTimer (polling loop) with continuousLocationListener registered via requestLocationUpdates.
  • Updates are now triggered by location changes (min 2s, 5m distance) rather than a fixed timer.
  • Added proper cleanup for location listeners in endLiveRefresh and cleanup.
  • Added startBackgroundLocationUpdates and stopBackgroundLocationUpdates helper methods (currently unused).
  • Improved compatibility implementations for LocationListener callbacks.

Impact

  • More responsive location updates in the UI.
  • Better battery efficiency by adhering to system location update logic.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines 160 to 164
locationManager.requestLocationUpdates(
provider,
2000L,
5f,
continuousLocationListener

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Repeated beginLiveRefresh piles up location listeners

The new real-time refresh registers continuous updates every time beginLiveRefresh is called, but unlike the previous timer-based implementation it never removes an existing listener before calling requestLocationUpdates. In LocationChannelsSheet the LaunchedEffect keyed on availableChannels and bookmarks re-invokes beginLiveRefresh on each channel update while the sheet stays open, so every location result triggers another registration to the same continuousLocationListener. This stacks multiple active listeners, causing duplicate callbacks and unnecessary background location polling (battery and compute overhead) until the sheet is dismissed.

Useful? React with 👍 / 👎.

@callebtc
Copy link
Collaborator Author

callebtc commented Jan 4, 2026

I've pushed a fix (commit 411d99a) that addresses the following:

  1. Usage of interval parameter: The beginLiveRefresh method now correctly uses the passed interval argument for the location update rate instead of ignoring it.
  2. Removal of dead code: I removed the unused startBackgroundLocationUpdates and stopBackgroundLocationUpdates methods to keep the codebase clean.

@callebtc
Copy link
Collaborator Author

callebtc commented Jan 4, 2026

I've merged main into this branch (commit 3b3fd19).

Conflict Resolution:

  • Resolved a conflict in LocationChannelManager.kt.
  • main refactored internal state management from LiveData to StateFlow.
  • I updated the new location update logic (introduced in this PR) to use StateFlow syntax (replacing postValue(false) with .value = false) to align with the changes from main.

@callebtc callebtc merged commit fe5417b into main Jan 4, 2026
3 checks passed
@callebtc callebtc deleted the location-update branch January 4, 2026 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants